﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Devart.Data.PostgreSql;
using System.Data;

namespace Sistema_financiero.Entidades
{
    public class Cuota
    {
        public int Id_prestamo { get; set; }
        public int Num_cuota { get; set; }
        public DateTime Fecha_vencimiento { get; set; }
        public decimal Capital { get; set; }
        public decimal Intereses { get; set; }
        public decimal Comision { get; set; }
        public decimal Gastos { get; set; }
        public decimal Iva { get; set; }
        public decimal Punitorios { get; set; }
        public decimal Punitorios_adic { get; set; }
        public decimal Total { get; set; }

        public static void Guardar_cuota(int id_prestamo, int num_cuota, DateTime fecha_vencimiento, decimal capital, decimal comision, decimal intereses, decimal gastos, decimal iva, decimal punitorios, decimal punitorios_adicionales)
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Unicode = true;
                conexion.Open();

                string sql = String.Format("INSERT INTO \"Cuota\" (\"id_prestamo\", \"num_cuota\", \"fecha_vencimiento\", \"capital\", \"comision\", \"intereses\", \"gastos\", \"IVA\", \"punitorios\", \"punitorios_adicionales\") VALUES ({0}, {1}, '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}')", id_prestamo, num_cuota, fecha_vencimiento, capital, comision, intereses, gastos, iva, punitorios, punitorios_adicionales);
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();

                conexion.Close();


            }
        }

        public static List<Cuota> Obtener_Cuotas(int prestamo_seleccionado)
        {
            List<Cuota> lista = new List<Cuota>();
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Unicode = true;
                conexion.Open();
                string sql = String.Format("SELECT * FROM obtener_cuotas({0})", prestamo_seleccionado);
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    lista.Add(Cargar_Cuota(reader));
                }
                conexion.Close();
            }
            return lista;

        }
        private static Cuota Cargar_Cuota(IDataReader reader)
        {
            Cuota item = new Cuota();
            item.Id_prestamo = Convert.ToInt32(reader[0]);
            item.Num_cuota = Convert.ToInt32(reader[1]);
            item.Fecha_vencimiento = Convert.ToDateTime(reader[2]);
            item.Capital = Convert.ToDecimal(reader[3]);
            item.Comision = Convert.ToDecimal(reader[4]);
            item.Intereses = Convert.ToDecimal(reader[5]);
            item.Gastos = Convert.ToDecimal(reader[6]);
            item.Iva = Convert.ToDecimal(reader[7]);
            item.Punitorios = Convert.ToDecimal(reader[8]);
            item.Punitorios_adic = Convert.ToDecimal(reader[9]);
            item.Total = Decimal.Round(item.Capital + item.Comision + item.Intereses + item.Gastos + item.Iva + item.Punitorios + item.Punitorios_adic);
            

            return item;
        }

        public static void Actualizar_punitorio_cuota(int id_prestamo, int num_cuota, decimal punitorio, decimal punitorio_adic)
        {
            using (PgSqlConnection conexion = new PgSqlConnection(frm_Menu.conexion))
            {
                conexion.Unicode = true;
                conexion.Open();

                string sql = String.Format("UPDATE \"public\".\"Cuota\" SET \"punitorios\"= '{0}', \"punitorios_adicionales\"= '{1}' WHERE \"id_prestamo\" = {2} AND \"num_cuota\" = {3}", punitorio, punitorio_adic, id_prestamo, num_cuota);
                PgSqlCommand comando = new PgSqlCommand(sql, conexion);
                PgSqlDataReader reader = comando.ExecuteReader();
                reader.Read();

                conexion.Close();


            }
        }
    }


}
